from langchain_core.documents import Document
from langchain_openai import  OpenAIEmbeddings
from langchain_core.runnables import RunnableLambda
from langchain_redis import RedisVectorStore, RedisConfig
from urllib.parse import quote
import os


# 准备测试数据，假设我们提供的文档数据如下:
documents = [
    Document(
        page_content="狗是伟大的伴侣，以其忠诚和友好而闻名。", # 文档内容
        metadata={"source":"哺乳动物宠物文档"} # 文档元数据
    ),
    Document(
        page_content="猫是独立的宠物，通常喜欢自己的空间。",
        metadata={"source":"哺乳动物宠物文档"}
    ),
    Document(
        page_content="金鱼实时初学者的流行宠物，需要相对简单的护理。",
        metadata={"source": "鱼类宠物文档"}
    ),
    Document(
        page_content="白头鹰是犀利的猎手，视力很强大。",
        metadata={"source": "鸟类宠物文档"}
    )
]

#获取redis的密码
password_encoded = quote(os.environ["REDIS_PASSWORD"])
#print("password_encoded:",password_encoded)

redis_config = RedisConfig(
    redis_url=f"redis://:{password_encoded}@localhost:6379/0",
    index_name="langchain_redis_vector_store"
)
# 生产vector_store
vector_store = RedisVectorStore(
    embeddings=OpenAIEmbeddings(model="text-embedding-3-large"),
    config=redis_config
)

# 将文档添加到向量数据库中
vector_store.add_documents(documents)
# 相似度查询,返回相似的文档
retriever = RunnableLambda(vector_store.similarity_search).bind(k=1)
print(retriever.batch(['加菲猫', '鲸鱼']))